import requests
import json
from datetime import datetime

def write_hazardous_waste_to_api():
    """
    功能：将《国家危险废物名录(2025年版)》中263-003-04废物信息通过接口写入
    返回：接口响应结果（成功/失败信息）
    """
    # 1. 接口基础配置
    api_url = "http://192.168.11.91:32565/hazardous-waste/hazardous_waste_information"
    headers = {
        "Content-Type": "application/json",
        "cup-auth":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiIwMDAwMDAiLCJ1c2VyX25hbWUiOiIxMzYwODMzOTU1NyIsImRlcHRfaWRzIjoiMTgyMDM3OTg1ODM3OTY4MTc5MyIsInJlYWxfbmFtZSI6IkdPT0TlhYjnlJ8iLCJjbGllbnRfaWQiOiJzYWJlciIsInJvbGVfaWQiOiIxNjk2MDAxNDQwMDU3ODQzMDAyIiwic2NvcGUiOlsiYWxsIl0sIm9hdXRoX2lkIjoiIiwiZGVwdF90eXBlIjoiMiIsImV4cCI6MTc1OTE0OTgzMiwicm9sZV9hbGlhcyI6ImNvbXBhbnksY29tcGFueUxlYWRlcixiaWdfcm9sZSIsImp0aSI6ImUyMmEyMTg1LTM0MjAtNDZlZi04MGVlLTE1ZGRiZjAxZGNmZSIsImtleSI6ImN1cGJhc2UiLCJkZXB0X25hbWUiOiLnpo_lu7rkvJjlipvnibnmnZDmlpnmnInpmZDlhazlj7giLCJhdmF0YXIiOiIvZGVmLWJ1Y2tldC8yMDI1MDQwNy8xNzQzOTkzMzkwMDcyLmpwZyIsImF1dGhvcml0aWVzIjpbImNvbXBhbnlMZWFkZXIiLCJiaWdfcm9sZSIsImNvbXBhbnkiXSwicm9sZV9uYW1lIjoiY29tcGFueSxjb21wYW55TGVhZGVyLGJpZ19yb2xlIiwibGljZW5zZSI6InBvd2VyZWQgYnkgY3VweCIsImZ1bGxfbmFtZSI6Iuemj-W7uuS8mOWKm-eJueadkOaWmeaciemZkOWFrOWPuCIsInBvc3RfaWQiOiIxMTIzNTk4ODE3NzM4Njc1MjA4IiwidXNlcl9pZCI6IjE5MDcyODYxMTQ2MDYxNjYwMTgiLCJwaG9uZSI6IjEzNjA4MzM5NTU3Iiwibmlja19uYW1lIjoiR09PROWFiOeUnyIsImRldGFpbCI6eyJ0eXBlIjoid2ViIiwicmVhbE5hbWUiOiJHT09E5YWI55SfIn0sImRlcHRfaWQiOiIxODIwMzc5ODU4Mzc5NjgxNzkzIiwiYWNjb3VudCI6IjEzNjA4MzM5NTU3In0.iEwjhZ0zP5EBWLAK_O14hkGamF4xS_tjgT79J4hJSjk"
        # 若接口需要认证（如Token），可在此添加，示例：
        # "Authorization": "Bearer your_access_token"
    }

    # 2. 危废名录信息（严格匹配《国家危险废物名录(2025年版)》HW04类别下263-003-04记录）
    waste_data = {
        "wasteName": "甲拌磷生产过程中二乙基二硫代磷酸过滤产生的残余物",  # 名录中废物全称
        "wasteCode": "263-003-04",  # 名录中唯一废物代码（8位数字，第1-3位263为农药制造行业代码）
        "wasteCategory": "HW04",  # 修正原参数HW02，名录中263-003-04归属HW04农药废物
        "hazardousFeature": "toxicity",  # 名录中该废物危险特性为T（毒性），对应参数值
        "wasteState": "solid_state",  # 名录未明确状态，结合工艺默认固态（过滤残余物通常为固态）
        "detailDesc": "甲拌磷生产过程中，二乙基二硫代磷酸过滤工序产生的不可再利用残余物，依据《国家危险废物名录(2025年版)》归属HW04农药废物类别，具有毒性危险特性",  # 补充名录关联描述
        "physicalProperties": "通常为固态残渣，可能含油性成分，颜色多为棕褐色或黑色，具有毒性，需按危险废物管理",  # 基于工艺补充物理性质
        "enterpriseId": "1820379858379681793"  # 用户指定企业ID
    }

    # 3. 打印请求信息（便于调试和记录）
    print("=" * 50)
    print(f"请求时间：{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print(f"请求接口：{api_url}")
    print(f"请求头：{json.dumps(headers, indent=2, ensure_ascii=False)}")
    print(f"请求参数（危废名录信息）：{json.dumps(waste_data, indent=2, ensure_ascii=False)}")
    print("=" * 50)

    try:
        # 4. 发送POST请求（接口写入操作）
        response = requests.post(
            url=api_url,
            data=json.dumps(waste_data, ensure_ascii=False),  # 避免中文乱码
            headers=headers,
            timeout=20  # 超时时间20秒，适配接口响应耗时
        )

        # 5. 处理响应结果
        response.raise_for_status()  # 自动捕获4xx/5xx状态码异常
        response_json = response.json()

        # 6. 打印响应信息
        print(f"\n【接口响应成功】")
        print(f"响应状态码：{response.status_code}")
        print(f"响应内容：{json.dumps(response_json, indent=2, ensure_ascii=False)}")

        # 7. 验证写入结果（核心字段匹配校验）
        if response_json.get("success") or response.status_code in [200, 201]:
            returned_waste_code = response_json.get("data", {}).get("wasteCode")
            returned_waste_category = response_json.get("data", {}).get("wasteCategory")
            if returned_waste_code == waste_data["wasteCode"] and returned_waste_category == waste_data["wasteCategory"]:
                print(f"\n✅ 危废名录信息写入成功！匹配校验通过：")
                print(f" - 废物代码：{returned_waste_code}（与名录263-003-04一致）")
                print(f" - 废物类别：{returned_waste_category}（与名录HW04一致）")
            else:
                print(f"\n⚠️  危废名录信息写入后字段不匹配：")
                print(f" - 预期废物代码：{waste_data['wasteCode']}，实际返回：{returned_waste_code}")
                print(f" - 预期废物类别：{waste_data['wasteCategory']}，实际返回：{returned_waste_category}")
        return response_json

    except requests.exceptions.Timeout:
        error_msg = "❌ 请求超时（超过20秒），请检查接口服务是否正常或网络是否通畅"
        print(f"\n{error_msg}")
        raise Exception(error_msg)
    except requests.exceptions.ConnectionError:
        error_msg = f"❌ 连接失败，请确认接口地址{api_url}正确且服务已启动"
        print(f"\n{error_msg}")
        raise Exception(error_msg)
    except requests.exceptions.HTTPError as e:
        error_msg = f"❌ 接口返回错误状态码：{e.response.status_code}，响应内容：{e.response.text}"
        print(f"\n{error_msg}")
        raise Exception(error_msg)
    except Exception as e:
        error_msg = f"❌ 请求发生未知异常：{str(e)}"
        print(f"\n{error_msg}")
        raise Exception(error_msg)

# 8. 执行脚本（主函数调用）
if __name__ == "__main__":
    write_hazardous_waste_to_api()